package 牛客_面试必刷.Month07.day09;

public class 旋转数组的最小数字 {
    public int minNumberInRotateArray(int [] array) {
        //为什么第一次做这道题没有做出来呢？因为我太死板了，思维有点固定，你左右的开闭包括值的选取应该是按照题目的要求来的
        //
        int left = 0;
        int right = array.length - 1;//这里就不能用左开了嗷，因为要进行比较
        while(left <= right){
            int mid = (right + left) / 2;
            if(array[mid] > array[right]){
                //这是第一个要注意的点，因为mid对应的值大于 right，所以mid下标的值就不考虑了，直接去左边找
                left = mid + 1;
            }else if(array[mid] < array[right]){
                //这里因为mid的值比较小，所以有可能mid就是最小的值，所以right = mid
                right = mid;
            }else{
                //这里因为两个值相等了，比如[1,1,0,1,1]这种的，你就需要一个一个的去比较
                right--;
            }
        }
        return array[left];//注意了，while循环最后的破坏条件就是right--，所以这里用left返回
    }
}
